/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package basedatos;

import genericos.Cambio;
import genericos.Correos;
import genericos.Insercion;
import genericos.JSPassGenerator;
import genericos.ListaNodos;

/**
 *
 * @author residentene
 */
public class Cambiar {

    private static Cambio c = new Cambio();
    private static Insercion in = new Insercion();

    public static void cedulac(int usuario) {
        int id = Seleccion.idcedula(usuario);
        int puesto = Seleccion.puestodeuser(usuario);
        System.out.println("El puesto de la cedula es: " + puesto);
        ListaNodos.agregacam("usuario", usuario);
        ListaNodos.agregacam("puesto", puesto);
        ListaNodos.agregacam("jefe", Seleccion.jefe(puesto));
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
    }

    /**
     * Método que cambia un objetivo de direccion a terminado si tiene el 100%
     * de cumplimiento.
     *
     * @param id id del obj de direccion
     * @param cum cumplimiento
     */
    public static void objdircumple(int id, int cum) {

        if (cum == 100) {
            ListaNodos.agregacam("cumple", cum);
            ListaNodos.agregacam("estado", "Terminado");
            c.setCond("idobjdir", id);
            c.actualiza(ListaNodos.conversion_upd(), "objdir");
            ListaNodos.borradoact();
            //System.gc();
        } else {
            ListaNodos.agregacam("cumple", cum);
            ListaNodos.agregacam("estado", "No Terminado");
            c.setCond("idobjdir", id);
            c.actualiza(ListaNodos.conversion_upd(), "objdir");
            ListaNodos.borradoact();
            //Algcal.inserta_obdir(id);
            //System.gc();
        }

    }

    /**
     * Método que califica un objetivo de direccion en base a su id
     *
     * @param id id del objetivo de direccion.
     */
    public static void calificarobjdir(int id) {
        ListaNodos.agregacamexp("logro", "(TRUNCATE(peso*cumple/100,0))");
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        c.setCond("idobjdir", id);
        ListaNodos.borradoact();

        //System.gc();
    }

    /**
     * Metodo que otorga un turno a uno de los directores para inscribir las
     * tacticas de el plan.
     *
     * @param direccion id de la direccion
     */
    public static void ponturno(int direccion) {
        ListaNodos.agregacam("turno", 1);
        c.setCond("id", direccion);
        c.actualiza(ListaNodos.conversion_upd(), "direccion");
        ListaNodos.borradoact();
        //System.gc();
        ListaNodos.agregacam("turno", 0);
        c.setCond(" where id != " + direccion);
        c.actualiza(ListaNodos.conversion_upd(), "direccion");
        ListaNodos.borradoact();
    }

    /**
     * Metodo que cambia el campo de resultado en la cedula al momento de
     * calificar
     *
     * @param cedula id de la cedula.
     * @param total cantidad total.
     */
    public static void valorcedula(int cedula, int total) {
        ListaNodos.agregacam("resultado", total);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que cambia el estado de un objetivo de colaborador en base a sus
     * datos
     *
     * @param datos id de cedula y cantidad de cumplimiento
     * @param trim trimestre actual
     */
    public static void cambiacumplecol(String[][] datos, int ced, int are) {
        for (int i = 0; i < datos.length; i++) {
            int cum = Integer.valueOf(datos[i][0]);
            System.out.println("cambiacumplecol: El cumplimiento es de " + cum);
            if (cum == 100) {
                ListaNodos.agregacam("cumple", cum);
                ListaNodos.agregacam("estado", "Terminado");

                c.setCond("id", Integer.valueOf(datos[i][1]));
                c.actualiza(ListaNodos.conversion_upd(), "objcol");
                ListaNodos.borradoact();
                calificarcedcol(Integer.valueOf(datos[i][1]));
                //System.gc();
            } else {
                ListaNodos.agregacam("cumple", cum);
                ListaNodos.agregacam("estado", "No Terminado");

                c.setCond("id", Integer.valueOf(datos[i][1]));
                c.actualiza(ListaNodos.conversion_upd(), "objcol");
                ListaNodos.borradoact();
                Algcal.inserta_obcol(Integer.valueOf(datos[i][1]), ced);
                calificarcedcol(Integer.valueOf(datos[i][1]));
                //System.gc();
            }
        }
        Algcal.abrecal(ced);
        Algcal.regavance(ced);


    }

    /**
     * Metodo que califica en base al cumplimiento el estado de cada uno de los
     * objetivos
     *
     * @param datos datos que deben ponerse idcedula y cumplimiento
     * @param trim trimeste actual
     */
    public static void cambiacumplemm(String[][] datos, int ced, int are) {

        for (int i = 0; i < datos.length; i++) {
            int cum = Integer.valueOf(datos[i][0]);
            System.out.println("cambiacumplemm: El cumplimiento es de " + cum);
            if (cum == 100) {
                ListaNodos.agregacam("estado", "Terminado");
                ListaNodos.agregacam("cumple", cum);

                c.setCond("id", Integer.valueOf(datos[i][1]));
                c.actualiza(ListaNodos.conversion_upd(), "objmm");
                ListaNodos.borradoact();
                calificarcedmm(Integer.valueOf(datos[i][1]));
                //System.gc();
            } else {
                ListaNodos.agregacam("cumple", cum);
                ListaNodos.agregacam("estado", "No Terminado");

                c.setCond("id", Integer.valueOf(datos[i][1]));
                c.actualiza(ListaNodos.conversion_upd(), "objmm");
                ListaNodos.borradoact();
                Algcal.inserta_obmm(Integer.valueOf(datos[i][1]), ced);
                calificarcedmm(Integer.valueOf(datos[i][1]));
                //System.gc();
            }

        }
        Algcal.abrecal(ced);
        Algcal.regavance(ced);
    }

    /**
     * Método ue cambia el cumplimiento de los objetivos de un director para
     * ponerlos en terminado y no terminado
     *
     * @param datos posicion 0 es cumplimiento, posicion 1 es id de cedula
     * @param trim triemstre actual
     */
    public static void cambiacumpledir(String[][] datos, int ced, int are) {
        for (int i = 0; i < datos.length; i++) {
            int cum = Integer.valueOf(datos[i][0]);
            System.out.println("cambiacumpledir: El cumplimiento es de " + cum);
            if (cum == 100) {
                ListaNodos.agregacam("cumple", cum);
                ListaNodos.agregacam("estado", "Terminado");
                int id = Integer.valueOf(datos[i][1]);
                System.out.println("El id es en cambiacumpledir: " + id);
                c.setCond("id", id);
                c.actualiza(ListaNodos.conversion_upd(), "obdirector");
                ListaNodos.borradoact();
                calificarcedobdir(id);
                //System.gc();
            } else {
                ListaNodos.agregacam("cumple", cum);
                ListaNodos.agregacam("estado", "No Terminado");
                int id = Integer.valueOf(datos[i][1]);
                System.out.println("El id es en cambiacumpledir: " + id);
                c.setCond("id", id);
                c.actualiza(ListaNodos.conversion_upd(), "obdirector");
                ListaNodos.borradoact();
                Algcal.inserta_obdirector(Integer.valueOf(datos[i][1]), ced);
                calificarcedobdir(id);
                //System.gc();
            }

        }
        Algcal.abrecal(ced);
        Algcal.regavance(ced);
    }

    /**
     * método que califica la cédula de un colaborador en el campo logro
     *
     * @param ced id de la cédula
     * @param trim trimestre actual
     */
    public static void calificarcedcol(int id) {
        ListaNodos.agregacamexp("logro", "(TRUNCATE(peso*cumple/100,0))");
        c.actualiza(ListaNodos.conversion_upd(), "objcol");
        c.setCond("id", id);
        ListaNodos.borradoact();
    }
    //

    /**
     * Método que califica los objetivos de mando medio en base a su cedula y su
     * trimestre
     *
     * @param ced id de la cedula
     * @param trim trimestre actual
     */
    public static void calificarcedmm(int id) {
        ListaNodos.agregacamexp("logro", "(TRUNCATE(peso*cumple/100,0))");
        c.actualiza(ListaNodos.conversion_upd(), "objmm");
        c.setCond("id", id);
        ListaNodos.borradoact();

        //System.gc();
    }

    /**
     * Método que califica los objetivos de un director en base a su id de
     * cédula
     *
     * @param ced id de la cédula.
     * @param trim trimestre actual.
     */
    public static void calificarcedobdir(int id) {
        //  System.out.println("calificarcedobdir: Los datos son cedula="+ced+" trimestre="+trim+" aregistro="+are);
        ListaNodos.agregacamexp("logro", "(TRUNCATE((peso*cumple/100),0))");
        c.actualiza(ListaNodos.conversion_upd(), "obdirector");
        c.setCond("id", id);
        ListaNodos.borradoact();
        //System.gc();

    }

    /**
     * Método con el cual se cambia la bandera de revision a 1 (colaborador)
     *
     * @param cedula id de la cedula
     */
    public static void piderevision(int cedula) {

        ListaNodos.agregacam("solob", 1);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que cambia la bandera de revision par alos objetivos de direccion
     *
     * @param cedula id dela cedula
     */
    public static void piderevisiondir(int cedula) {

        ListaNodos.agregacam("solobdir", 1);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que cambia la bandera de revision de tacticas.
     *
     * @param cedula id de la cedula
     */
    public static void piderevisiontac(int cedula) {
        // ListaNodos.agregacam("aceptado", 1);
        ListaNodos.agregacam("soltac", 1);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que cambia el estado de aceptado a 1 y cambiando solob en 0
     *
     * @param cedula id de la cedula
     */
    public static void aceptarcedula(int cedula) {
        ListaNodos.agregacam("aceptado", 1);
        ListaNodos.agregacam("solob", 0);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
        int trim = Seleccion.calculatrimestre();
        int user = Seleccion.userxcedula(cedula);
        int nivel = Seleccion.niveldeuser(user);
        switch (nivel) {
            case 2:
                ListaNodos.agregacam("estado", "Inscrito");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado!='Anulado';");
                c.actualiza(ListaNodos.conversion_upd(), "obdirector");
                ListaNodos.borradoact();
                //System.gc();
                break;
            case 3:
                ListaNodos.agregacam("estado", "Inscrito");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado!='Anulado';");
                c.actualiza(ListaNodos.conversion_upd(), "objmm");
                ListaNodos.borradoact();
                //System.gc();
                break;
            case 4:
                ListaNodos.agregacam("estado", "Inscrito");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado!='Anulado';");
                c.actualiza(ListaNodos.conversion_upd(), "objcol");
                ListaNodos.borradoact();
                //System.gc();
                break;
        }
    }

    /**
     * Metodo que cambia el estado de aceptado a 0 y cambia a solob a 0
     *
     * @param cedula id de la cedula
     */
    public static void noaceptarcedula(int cedula) {
        ListaNodos.agregacam("aceptado", 0);
        ListaNodos.agregacam("solob", 0);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que cambia el estado de aceptdir a 1 y cambia a solobdir a 0
     *
     * @param cedula id de la cedula
     * @param direccion id de la direccion
     */
    public static void aceptarobdir(int cedula, int direccion) {
        System.out.println("El valor al aceptar de cedula es " + cedula + " El valor de la direccion es " + direccion);
        ListaNodos.agregacam("aceptdir", 1);
        ListaNodos.agregacam("solobdir", 0);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
        int trim = Seleccion.calculatrimestre();

        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond(" where trimestre=" + trim + " and direccion=" + direccion + " and estado='En Revisión'");
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        ListaNodos.borradoact();
        //System.gc();

    }

    /**
     * Metodo que cambia el estado de aceptdir a 0 y cambia a solobdir a 0
     *
     * @param cedula
     */
    public static void noaceptaobdir(int cedula) {
        ListaNodos.agregacam("aceptdir", 0);
        ListaNodos.agregacam("solobdir", 0);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que cambia el estado de acepttac a 1 y soltac a 0
     *
     * @param cedula id de la cedula
     */
    public static void aceptartacticas(int cedula) {
        ListaNodos.agregacam("acepttac", 1);
        ListaNodos.agregacam("soltac", 0);
        // cedula=Requerimientos.cedturno();
        //System.out.println("La cedula calculada para el director con el turno es: "+cedula);
        c.setCond("id", Requerimientos.cedturno());
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
        int[] plan = Seleccion.planestra();
        ListaNodos.agregacam("estado", "Inscrito");
        System.out.println("El id del plan es " + plan[1]);
        c.setCond("plan", plan[1]);
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que cambia el estado de acepttac a 0 y soltac a 0
     *
     * @param cedula id de la cedula
     */
    public static void noaceptartacticas(int cedula) {

        ListaNodos.agregacam("acepttac", 1);
        ListaNodos.agregacam("soltac", 0);
        c.setCond("id", Requerimientos.cedturno());
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que cambia la aceptacion y pone en uno la peticion
     *
     * @param cedula id de la cedula
     */
    public static void autorizacambio(int cedula) {
        ListaNodos.agregacam("aceptado", 0);
        ListaNodos.agregacam("solob", 1);
        c.setCond("id", cedula);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        int trim = Seleccion.calculatrimestre();
        int user = Seleccion.userxcedula(cedula);
        int nivel = Seleccion.niveldeuser(user);
        switch (nivel) {
            case 2:
                ListaNodos.agregacam("estado", "En Revisión");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado ='Inscrito';");
                c.actualiza(ListaNodos.conversion_upd(), "obdirector");
                ListaNodos.borradoact();
                //System.gc();
                break;
            case 3:
                ListaNodos.agregacam("estado", "En Revisión");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado='Inscrito';");
                c.actualiza(ListaNodos.conversion_upd(), "objmm");
                ListaNodos.borradoact();
                //System.gc();
                break;
            case 4:
                ListaNodos.agregacam("estado", "En Revisión");
                c.setCond("where trimestre=" + trim + " and cedula=" + cedula + " and estado='Inscrito';");
                c.actualiza(ListaNodos.conversion_upd(), "objcol");
                ListaNodos.borradoact();
                //System.gc();
                break;
        }
        //System.gc();
    }

    public static void auttac() {
        ListaNodos.agregacam("acepttac", 0);
        ListaNodos.agregacam("soltac", 1);
        c.setCond("id", Requerimientos.cedturno());
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        int[] plan = Seleccion.planestra();
        ListaNodos.agregacam("estado", "En Revisión");
        System.out.println("El id del plan es " + plan[1]);
        c.setCond(" where plan=" + plan[1] + " and estado='Inscrito'");
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
    }

    public static void autobdir(int direc) {
        ListaNodos.agregacam("aceptdir", 0);
        ListaNodos.agregacam("solobdir", 1);
        int id = Requerimientos.ceduladir(direc);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        int trim = Seleccion.calculatrimestre();

        ListaNodos.agregacam("estado", "En Revisión");
        c.setCond(" where trimestre=" + trim + " and direccion=" + direc + " and estado='Inscrito'");
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        ListaNodos.borradoact();

    }

    /**
     * Metodo update para cambiar los datos de los objetivos compartidos
     *
     * @param datos String[][] de los datos
     */
    public static void up_objcomp(String[][] datos) {

        for (int i = 0; i < datos.length; i++) {
            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("direccion", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("puesto", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("resultado", datos[i][4]);
            ListaNodos.agregacam("estado", "Modificado");
            c.setCond("id", Integer.valueOf(datos[i][5]));
            c.actualiza(ListaNodos.conversion_upd(), "objcomp");
            ListaNodos.borradoact();
            //System.gc();
        }
    }

    /**
     * Metodo que actualiza un dominio
     *
     * @param id id del dominio
     * @param nombre nombre del dominio
     */
    public static void up_dominio(int id, String nombre) {
        ListaNodos.agregacam("nombre", nombre);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "dominio");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que actualiza la tactica
     *
     * @param datos nombre,descripcion,dominio,peso,cumple,resultado,lohro.idtac
     * del 0 al 7
     */
    public static void up_tactica(String[][] datos) {
        for (int i = 0; i < datos.length; i++) {
            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("dominio", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("peso", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("cumple", Integer.valueOf(datos[i][4]));
            ListaNodos.agregacam("resultado", datos[i][5]);
            ListaNodos.agregacam("logro", Integer.valueOf(datos[i][6]));
            ListaNodos.agregacam("estado", "En Revisión");

            c.setCond("idtac", Integer.valueOf(datos[i][7]));
            c.actualiza(ListaNodos.conversion_upd(), "tactica");
            ListaNodos.borradoact();
            //System.gc();   
        }

    }

    /**
     * Metodo que actualiza los datos del director.
     *
     * @param datos
     * nombre,descripcion,objdir,peso,cumple,resultado,logro,comcol,comjefe,cedula,rimestre
     * e id del 0-11
     */
    public static void up_objdirector(String[][] datos) {
        java.util.Date n = new java.util.Date();
        for (int i = 0; i < datos.length; i++) {
            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("objdir", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("peso", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("cumple", Integer.valueOf(datos[i][4]));
            ListaNodos.agregacam("resultado", datos[i][5]);
            ListaNodos.agregacam("logro", Integer.valueOf(datos[i][6]));
            ListaNodos.agregacam("comcol", datos[i][7]);
            ListaNodos.agregacam("comjefe", datos[i][8]);
            ListaNodos.agregacam("cedula", Integer.valueOf(datos[i][9]));
            ListaNodos.agregacam("estado", "En Revisión");
            ListaNodos.agregacam("trimestre", Integer.valueOf(datos[i][10]));
            ListaNodos.agregacam("aregistro", (n.getYear() + 1900));
            c.setCond("id", Integer.valueOf(datos[i][11]));
            c.actualiza(ListaNodos.conversion_upd(), "obdirector");
            ListaNodos.borradoact();
            //System.gc();   
        }
    }

    /**
     * Metodo que actualiza los datos de un objetivo de mandos medios
     *
     * @param datos
     * nombre,descripcion,objdir,peso,cumple,resultao.logro,comcol,comjefe,cedula,trimestre
     * e id de 0 a 11
     */
    public static void up_objmm(String[][] datos) {
        java.util.Date n = new java.util.Date();
        for (int i = 0; i < datos.length; i++) {
            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("objdir", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("peso", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("cumple", Integer.valueOf(datos[i][4]));
            ListaNodos.agregacam("resultado", datos[i][5]);
            ListaNodos.agregacam("logro", Integer.valueOf(datos[i][6]));
            ListaNodos.agregacam("comcol", datos[i][7]);
            ListaNodos.agregacam("comjefe", datos[i][8]);
            ListaNodos.agregacam("cedula", Integer.valueOf(datos[i][9]));
            ListaNodos.agregacam("estado", "En Revisión");
            ListaNodos.agregacam("trimestre", Integer.valueOf(datos[i][10]));
            ListaNodos.agregacam("aregistro", (n.getYear() + 1900));
            c.setCond("id", Integer.valueOf(datos[i][11]));
            c.actualiza(ListaNodos.conversion_upd(), "objmm");
            ListaNodos.borradoact();
            //System.gc();   
        }
    }

    /**
     * Metodo queactualiza los objetivos de un colaborador
     *
     * @param datos
     * nombre,descripciom.objefe,peso,cumple,resultado.logro.comcol.comjefe,trimestre
     * junto al id son
     */
    public static void up_objcol(String[][] datos) {
        java.util.Date n = new java.util.Date();
        for (int i = 0; i < datos.length; i++) {

            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("objefe", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("peso", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("cumple", Integer.valueOf(datos[i][4]));
            ListaNodos.agregacam("resultado", datos[i][5]);
            ListaNodos.agregacam("logro", Integer.valueOf(datos[i][6]));
            ListaNodos.agregacam("comcol", datos[i][7]);
            ListaNodos.agregacam("comjefe", datos[i][8]);
            ListaNodos.agregacam("cedula", Integer.valueOf(datos[i][9]));
            ListaNodos.agregacam("estado", "En Revisión");
            ListaNodos.agregacam("trimestre", Integer.valueOf(datos[i][10]));
            ListaNodos.agregacam("aregistro", (n.getYear() + 1900));
            c.setCond("id", Integer.valueOf(datos[i][11]));
            c.actualiza(ListaNodos.conversion_upd(), "objcol");
            ListaNodos.borradoact();
            //System.gc();   
        }

    }

    /**
     * Metodo que actualiza los objetivos de direccion
     *
     * @param datos
     * nombre,descripcion,idtac,peso,cumple,resultado.logro.trmestre junto con
     * id van del 0 al 8
     */
    public static void up_objdir(String[][] datos) {
        java.util.Date n = new java.util.Date();
        for (int i = 0; i < datos.length; i++) {

            ListaNodos.agregacam("nombre", datos[i][0]);
            ListaNodos.agregacam("descripcion", datos[i][1]);
            ListaNodos.agregacam("idtac", Integer.valueOf(datos[i][2]));
            ListaNodos.agregacam("peso", Integer.valueOf(datos[i][3]));
            ListaNodos.agregacam("cumple", Integer.valueOf(datos[i][4]));
            ListaNodos.agregacam("resultado", datos[i][5]);
            ListaNodos.agregacam("logro", Integer.valueOf(datos[i][6]));
            ListaNodos.agregacam("estado", "En Revisión");
            ListaNodos.agregacam("trimestre", Integer.valueOf(datos[i][7]));
            ListaNodos.agregacam("aregistro", (n.getYear() + 1900));
            c.setCond("idobjdir", Integer.valueOf(datos[i][8]));
            c.actualiza(ListaNodos.conversion_upd(), "objdir");
            ListaNodos.borradoact();
            //System.gc();
        }
    }

    /**
     * Metodo que actualiza la cedula de un usuario
     *
     * @param id id de cedula
     * @param datos jefe,resultado y aceptado del 0 al 2 en un arreglo de String
     */
    public static void up_cedula(int id, String[] datos) {
        ListaNodos.agregacam("jefe", datos[0]);
        ListaNodos.agregacam("resultado", Integer.valueOf(datos[1]));
        ListaNodos.agregacam("aceptado", Integer.valueOf(datos[2]));
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que actualiza la direccion
     *
     * @param id id de direccion
     * @param nombre nombre de direccion
     */
    public static void up_direccion(int id, String nombre) {
        ListaNodos.agregacam("nombre", nombre);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "direccion");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que actualiza la dependencia de un puesto
     *
     * @param dep id del direccion
     * @param id id el puesto
     */
    public static void up_dependencias(int dep, int id) {
        ListaNodos.agregacam("dep", dep);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "dependencia");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que actualiza la jerarquia de los puestos
     *
     * @param id id del detalle de tabla
     * @param arriba id de puesto superior
     * @param puesto id de puesto
     * @param abajo id de puesto inferior
     */
    public static void up_detpuesto(int id, int arriba, int puesto, int abajo) {
        ListaNodos.agregacam("arriba", arriba);
        ListaNodos.agregacam("idpuesto", puesto);
        ListaNodos.agregacam("abajo", abajo);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "detpuesto");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que modifica los puestos de la empresa
     *
     * @param id id del puesto
     * @param nombre nombre del puesto
     * @param nivel nivel que tiene
     * @param dir direccion a la que pertenece
     */
    public static void puestos(int id, String nombre, int nivel, int dir) {
        ListaNodos.agregacam("nombre", nombre);
        ListaNodos.agregacam("nivel", nivel);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "puestos");
        ListaNodos.borradoact();
        up_dependencias(id, dir);
        //System.gc();
    }

    /**
     * Metodo que actualiza un usuario al sistema y le informa la contraseña.
     *
     * @param id id de usuario
     * @param nombre nombre del nuevo usuario
     * @param correo correo del usuario
     * @param nivel nivel del usuario
     */
    public static void usuarios(int id, String nombre, String correo, int nivel) {
        ListaNodos.agregacam("nombre", nombre);
        ListaNodos.agregacam("correo", correo);
        String pass = JSPassGenerator.generate(8);
        ListaNodos.agregacam("contra", pass);
        ListaNodos.agregacam("nivel", nivel);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "usuarios");
        ListaNodos.borradoact();
        //notificacion a usuario.
        Correos.mensajecorto(Correos.crearmensaje("Inscripción al sistema", "Su nueva contraseña para el sistema Zianya es " + pass), correo, "Ingreso a Zianya");
        //System.gc();
    }

    /**
     * Metodo que cambia la contraseña de un usuario por una contraseña propia
     *
     * @param id id del usuario
     * @param contra contraseña nueva
     */
    public static void contrapropia(int id, String contra) {
        ListaNodos.agregacam("contra", contra);
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "usuarios");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que acepta los objetivos de colaborador en base al id de usuario
     *
     * @param iduser id del usuario
     */
    public static void aceptadoscol(int iduser) {
        ListaNodos.agregacam("aceptado", 1);
        c.setCond("usuario", iduser);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("WHERE cedula=(select id from cedula where usuario=" + iduser + " );");
        c.actualiza(ListaNodos.conversion_upd(), "objcols");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que permite la edicion de cedula
     *
     * @param user id del user a aceptar
     */
    public static void abrircedula(int user) {
        ListaNodos.agregacam("aceptado", 0);
        c.setCond("usuario", user);
        c.actualiza(ListaNodos.conversion_upd(), "cedula");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que anula una tactica
     *
     * @param id id de la tactica
     */
    public static void anulatactica(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("idtac", id);
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
        //Momento de busqueda metodo alterno (id relacionados a la tactica de objetivos de direccion)
        int[] arr = Algcal.objDirxtac(id);
        for (int i = 0; i < arr.length; i++) {
            anulaobjdir(arr[0]);
        }
    }

    /**
     * Método que anula un objetivo de colaborador
     *
     * @param id id de objetivo
     */
    public static void anulaobcol(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "objcol");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que anula un objetivo de direccion
     *
     * @param id id de objetivo
     */
    public static void anulaobjdir(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("idobjdir", id);
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        ListaNodos.borradoact();
        int arr[] = Algcal.objcolxdir(id);
        for (int i = 0; i < arr.length; i++) {
            int j = arr[i];
            anulaobcol(j);
        }
        arr = Algcal.objmmxdir(id);
        for (int i = 0; i < arr.length; i++) {
            int j = arr[i];
            anulaobjmm(j);
        }
        arr = Algcal.objdirexdir(id);
        for (int i = 0; i < arr.length; i++) {
            int j = arr[i];
            anulaobjdirector(j);
        }
        //System.gc();
    }

    /**
     * Metodo que anula un objetivo de director
     *
     * @param id id del objetivo a anular
     */
    public static void anulaobjdirector(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "obdirector");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que anula un objetivo de mando medio.
     *
     * @param id id del objetivo de mando medio.
     */
    public static void anulaobjmm(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "objmm");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que anula un objetivo de direccion.
     *
     * @param id id del objetivo compartido.
     */
    public static void anulaobjcomp(int id) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("idobjdir", id);
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que acepta el objetivo de director
     *
     * @param id id del objetivo del director
     */
    public static void aceptaobdirector(int id) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "obdirector");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que acepta un objetivo de colaborador
     *
     * @param dir id del objetivo de colaborador
     */
    public static void aceptarobjcol(int dir) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("id", dir);
        c.actualiza(ListaNodos.conversion_upd(), "objcol");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que acepta un objetivo de mando medio
     *
     * @param id id del objetivo
     */
    public static void aceptarobjmm(int id) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("id", id);
        c.actualiza(ListaNodos.conversion_upd(), "objmm");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Metodo que acepta los objetivos de direccion en base a su id
     *
     * @param dir id del objetivo de direccion
     */
    public static void aceptarobjdir(int dir) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("id", dir);
        c.actualiza(ListaNodos.conversion_upd(), "objdir");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que acepta las tacticas de un dominio inscribiendolas al plan
     *
     * @param dominio id del dominio
     */
    public static void aceptatacticas(int dominio) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("dominio", dominio);
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Aceptar todas las tácticas del plan en base al id de plan
     *
     * @param plan id del plan
     */
    public static void aceptartacticasfull(int plan) {
        ListaNodos.agregacam("estado", "Inscrito");
        c.setCond("plan", plan);
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que actualiza un plan revisando si se tiene alguno activado y
     * desactivando los demas
     *
     * @param datos arreglo de enteros id,duracion,activado,avance partiendo de
     * cero
     */
    public static void up_plan(int[] datos) {
        if (datos[2] == 1) {
            activacionplan(datos[0]);
            ListaNodos.agregacam("duracion", datos[1]);
            ListaNodos.agregacam("activo", datos[2]);
            ListaNodos.agregacam("avance", datos[3]);
            c.setCond("idplan", datos[0]);
            c.actualiza(ListaNodos.conversion_upd(), "plan");
            ListaNodos.borradoact();
            //System.gc();
        } else {
            ListaNodos.agregacam("duracion", datos[1]);
            ListaNodos.agregacam("activo", datos[2]);
            ListaNodos.agregacam("avance", datos[3]);
            c.setCond("idplan", datos[0]);
            c.actualiza(ListaNodos.conversion_upd(), "plan");
            ListaNodos.borradoact();
            //System.gc();
        }
    }

    /**
     * Metodo que aciva un plan estrategico y desactiva el resto
     *
     * @param plan id del plan a activar
     */
    public static void activacionplan(int plan) {
        ListaNodos.agregacam("activo", 0);
        c.setCond(" where idplan != " + plan);
        c.actualiza(ListaNodos.conversion_upd(), "plan");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que anula un plan estrategico
     *
     * @param plan id del plan
     */
    public static void anulaplan(int plan) {
        ListaNodos.agregacam("activo", 0);
        c.setCond("idplan", plan);
        c.actualiza(ListaNodos.conversion_upd(), "plan");
        ListaNodos.borradoact();
        //System.gc();
    }

    /**
     * Método que cancela las tacticas poniendo el estado en anulado
     *
     * @param idtac id de las tacticas
     */
    public static void cancelatacticas(int idtac) {
        ListaNodos.agregacam("estado", "Anulado");
        c.setCond("idtac", idtac);
        c.actualiza(ListaNodos.conversion_upd(), "tactica");
        ListaNodos.borradoact();
        //System.gc();
    }
}
